﻿using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.Text;
using System.Xml.Linq;

namespace Ocean.His.MedicalInsurance
{
    /// <summary>
    /// 就诊信息
    /// </summary>
    [DataContract]
    public class SI2203AMdtrtInfo
    {

        /// <summary>
        /// 就诊ID
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "mdtrt_id")]
        public string MdtrtId { get; set; }

        /// <summary>
        /// 人员编号
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "psn_no")]
        public string PsnNo { get; set; }

        /// <summary>
        /// 医疗类别
        /// 参数类型：字符型
        /// 参数长度：6
        /// 代码标识：Y
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "med_type")]
        public string MedType { get; set; }

        /// <summary>
        /// 开始时间
        /// 参数类型：日期时间型
        /// 参数长度：
        /// 代码标识：
        /// 是否必填：Y
        /// 就诊时间
        /// </summary>
        [DataMember(Name = "begntime")]
        public string Begntime { get; set; }

        /// <summary>
        /// 主要病情描述
        /// 参数类型：字符型
        /// 参数长度：1000
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "main_cond_dscr")]
        public string MainCondDscr { get; set; }

        /// <summary>
        /// 病种编码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 按照标准编码填写：按病种结算病种目录代码(bydise_setl_list_code)、门诊慢特病病种目录代码(opsp_dise_cod)、
        /// </summary>
        [DataMember(Name = "dise_codg")]
        public string DiseCodg { get; set; }

        /// <summary>
        /// 病种名称
        /// 参数类型：字符型
        /// 参数长度：500
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "dise_name")]
        public string DiseName { get; set; }

        /// <summary>
        /// 计划生育手术类别
        /// 参数类型：字符型
        /// 参数长度：6
        /// 代码标识：Y
        /// 是否必填：
        /// 生育门诊按需录入
        /// </summary>
        [DataMember(Name = "birctrl_type")]
        public string BirctrlType { get; set; }

        /// <summary>
        /// 计划生育手术或生育日期
        /// 参数类型：日期型
        /// 参数长度：
        /// 代码标识：
        /// 是否必填：
        /// 生育门诊按需录入，yyyy-MM-dd
        /// </summary>
        [DataMember(Name = "birctrl_matn_date")]
        public string BirctrlMatnDate { get; set; }

        /// <summary>
        /// 字段扩展
        /// 参数类型：字符型
        /// 参数长度：4000
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "exp_content")]
        public string ExpContent { get; set; }

    }

    /// <summary>
    /// 诊断信息
    /// </summary>
    [DataContract]
    public class SI2203ADiseInfo
    {

        /// <summary>
        /// 诊断类别
        /// 参数类型：字符型
        /// 参数长度：3
        /// 代码标识：Y
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "diag_type")]
        public string DiagType { get; set; }

        /// <summary>
        /// 诊断排序号
        /// 参数类型：数值型
        /// 参数长度：2
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "diag_srt_no")]
        public decimal DiagSrtNo { get; set; }

        /// <summary>
        /// 诊断代码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "diag_code")]
        public string DiagCode { get; set; }

        /// <summary>
        /// 诊断名称
        /// 参数类型：字符型
        /// 参数长度：100
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "diag_name")]
        public string DiagName { get; set; }

        /// <summary>
        /// 诊断科室
        /// 参数类型：字符型
        /// 参数长度：50
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "diag_dept")]
        public string DiagDept { get; set; }

        /// <summary>
        /// 诊断医生编码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "dise_dor_no")]
        public string DiseDorNo { get; set; }

        /// <summary>
        /// 诊断医生姓名
        /// 参数类型：字符型
        /// 参数长度：50
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "dise_dor_name")]
        public string DiseDorName { get; set; }

        /// <summary>
        /// 诊断时间
        /// 参数类型：日期时间型
        /// 参数长度：
        /// 代码标识：
        /// 是否必填：Y
        /// yyyy-MM-dd
        /// </summary>
        [DataMember(Name = "diag_time")]
        public string DiagTime { get; set; }

        /// <summary>
        /// 有效标志
        /// 参数类型：字符型
        /// 参数长度：3
        /// 代码标识：Y
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "vali_flag")]
        public string ValiFlag { get; set; }

    }

    /// <summary>
    /// 诊断信息
    /// </summary>
    [DataContract]
    public class SI2203AInputModel
    {
        [DataMember(Name = "mdtrtinfo")]
        public SI2203AMdtrtInfo SI2203AMdtrtInfo { get; set; }

        [DataMember(Name = "diseinfo")]
        public List<SI2203ADiseInfo> SI2203ADiseInfoList { get; set; }
    }

    /// <summary>
    /// 2203A
    /// 诊就诊信息上传A
    /// </summary>
    [DataContract]
    public class SI2203ARequestModel : SIBaseRequestModel
    {
        /// <summary>
        /// 交易输入
        /// </summary>
        [DataMember(Name = "input")]
        public SI2203AInputModel Input { get; set; }

        public SI2203ARequestModel(MedicalInsuranceOption medicalInsuranceOption,
            SI2203AMdtrtInfo si2203AMdtrtInfo, List<SI2203ADiseInfo> si2203ADiseInfoList) : base(medicalInsuranceOption)
        {
            Infno = "2203A";
            Input = new SI2203AInputModel();
            Input.SI2203AMdtrtInfo = si2203AMdtrtInfo;
            Input.SI2203ADiseInfoList = si2203ADiseInfoList;
        }
    }
}
